package com.dave.gd.common.redis;

import java.io.Serializable;
import java.util.List;

/**
 * .
 * 
 * @version Revision 1.0.0
 * @see:
 * @创建日期：2014年11月5日,11月14日修改
 * @功能说明：
 */
public interface ICacheRepository {
    
    /*------------------------Common------------------------*/
    /**
     * .
     * 判断key是否存在
     * 
     * @param key
     * @param group 组别
     * @return
     * @author dave
     *         2014年11月5日 dave
     */
    public boolean keyExists(String group, String key);
    
    /**
     * .
     * 删除数据
     * 
     * @param keys
     * @return
     * @author dave
     *         2014年11月5日 dave
     */
    public Long delete(String group, String... keys);
    
    /**
     * .
     * 重命名key，newKey存在时会被删除
     * 
     * @param oldkey
     * @param newkey
     * @return
     * @author dave
     *         2014年11月5日 dave
     */
    public String rename(String group, String oldkey, String newkey);
    
    /**
     * .
     * 设置key的过期时间
     * 
     * @param key
     * @param seconds
     * @return
     * @author dave
     *         2014年11月5日 dave
     */
    public Long expire(String group, String key, int seconds);
    
    /**
     * .
     * 获取key的活动时间
     * 
     * @param key
     * @return
     * @author dave
     *         2014年11月5日 dave
     */
    public Long ttl(String group, String key);
    
    /**
     * .
     * 取消key的过期时间
     * 
     * @param key
     * @return
     * @author dave
     *         2014年11月5日 dave
     */
    
    public Long persist(String group, String key);
    
    /*------------------------String------------------------*/
    /**
     * .
     * 添加String
     * 
     * @param key
     * @param value
     * @return
     * @author dave
     *         2014年11月5日 dave
     */
    public String set(String group, String key, String value);
    
    /**
     * .
     * 添加并设置该值得活动时间
     * 
     * @param key
     * @param value
     * @param seconds
     * @return
     * @author dave
     *         2014年11月5日 dave
     */
    public String set(String group, String key, String value, int seconds);
    
    /**
     * .
     * 获取String
     * 
     * @param key
     * @return
     * @author dave
     *         2014年11月5日 dave
     */
    public String get(String group, String key);
    
    /**
     * .
     * 返回多个String
     * 
     * @param keys
     * @return
     * @author dave
     *         2014年11月5日 dave
     */
    public List<String> getMulti(String group, String... keys);
    
    /*------------------------Object------------------------*/
    /**
     * .
     * 返回Object列表,
     * 
     * @param keys
     * @return
     * @author dave
     *         2014年11月5日 dave
     */
    public List<?> getMultiObject(String group, String... keys);
    
    /**
     * .
     * 保存可序列化的Object对象
     * 
     * @param key
     * @param value
     * @return
     * @author dave
     *         2014年11月5日 dave
     */
    public String setObject(String group, String key, Serializable value);
    
    /**
     * .
     * 保存可序列化的对象
     * 
     * @param key
     * @param value
     * @param seconds
     * @return
     * @author dave
     *         2014年11月5日 dave
     */
    public String setObject(String group, String key, Serializable value, int seconds);
    
    /**
     * .
     * 获取Object
     * 
     * @param key
     * @return
     * @author dave
     *         2014年11月5日 dave
     */
    public Object getObject(String group, String key);
    
}
